﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AplicacionUrHardwarez
{
    public partial class formProductos : Form
    {
        AlmacenEntities productosContext;
        public formProductos()
        {
            InitializeComponent();
        }


        //private string esteeselGUID
        //{
        //    get { return lblSendId.Text; }
        //    set { lblSendId.Text = value; }
        //}



        private void btnProductosVolver_Click(object sender, EventArgs e)
        {
            AlmacenEntities productosContext = new AlmacenEntities();
            formMenu2 menu = new formMenu2();
            menu.Visible = true;
            this.Visible = false;
            menu.Location = this.Location;
            //productosContext.Dispose(); 
        }

        private void btnProductosAlta_Click(object sender, EventArgs e)
        {
            formAlta alta = new formAlta();
            alta.Visible = true;
            this.Visible = false;
            alta.Location = this.Location;
        }


        private void btnProductosModificar_Click(object sender, EventArgs e)
        {   
            //instanciamos el formulario
            formModificar modificar = new formModificar();
            //Abrir formulario de modificaciones
            modificar.Visible = true;
            this.Visible = false;
            modificar.Location = this.Location;

            //Enviamos los datos obtenidos del click en el datagrid
            modificar.recibirId = lblSendId.Text;
            modificar.recibirCodigo = lblSendCodigo.Text;
            modificar.recibirNombre = lblSendNombre.Text;
            modificar.recibirDescripcion = lblSendDescripcion.Text;
            modificar.recibirPrecio = lblSendPrecio.Text;
            modificar.recibirStock = lblSendStock.Text;
        }

        /// <summary>
        /// Sets the sort mode for the data grid view by setting the sort mode of individual columns
        /// </summary>
        /// <param name="dgv">Data Grid View</param>
        /// <param name="sortMode">Sort node of type DataGridViewColumnSortMode</param>
        public static void SetGridViewSortState(DataGridView dgv, DataGridViewColumnSortMode sortMode)
        {
            foreach (DataGridViewColumn col in dgv.Columns)
                col.SortMode = sortMode;
        }

        private void formProductos_Load(object sender, EventArgs e)
        {
            this.gridProductos.DefaultCellStyle.ForeColor = Color.Yellow;
            this.gridProductos.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            this.gridProductos.MultiSelect = false;
            this.gridProductos.ReadOnly = true;
            this.gridProductos.RowHeadersVisible = false;



            //select new { productos2.ID, productos2.Codigo, productos2.Nombre,
            //    productos2.Descripcion, productos2.Precio, productos2.Stock, salidas.StockOut, entradas.StockIn };

            // Esta linea llama al meodo SetGridViewSortState definido anteriormente, sirve para evitar que las 
            //columnas se utilicen para reordenar los datos
            SetGridViewSortState(this.gridProductos, DataGridViewColumnSortMode.NotSortable);



            // Creamos la variable AlmacenEntities2 que es el que maneja las consultas con la base de datos


            //            // Recogemos la tabla productos con el gestor de entidades
            //            var productos = AlmacenEntities2.Productos;

            //            // Rellenamos el datagridview con los datos obtenidos por el gestor

            //            //gridProductos.DataSource = productos;


            //            //gridProductos.Columns["ID"].Visible = false;

            //            //string lastName = "Zhou";

            //            //using (AlmacenEntities context = new AlmacenEntities())
            ////{
            ////    ObjectSet contacts = context.Productos.Where(

            ////    var ordersQuery = from contact in contacts
            ////                      where contact.LastName == lastName
            ////                      select new { LastName = contact.LastName, Orders = contact.SalesOrderHeaders };

            try //Rellenar el datagrid con los datos obtenidos en la bbdd
            {
                var AlmacenEntities2 = new AlmacenEntities();

                var data = AlmacenEntities2.Productos;
                


                //var data = from productos2 in AlmacenEntities2.Productos

                //           join
                //               salidas in AlmacenEntities2.Salidas on productos2.ID equals salidas.IdProducto
                //           join
                //               entradas in AlmacenEntities2.Entradas on productos2.ID equals entradas.IdProducto
                //               where (productos2.ID == salidas.ID)
                //            group productos2 by productos2.ID into prods 
                //           select new {prods.ID, productos2.Codigo, productos2.Nombre, productos2.Descripcion, productos2.Precio, productos2.Stock, salidas.StockOut, entradas.StockIn };

    //            var query = (
    //from productos2 in productosContext.Productos
    //group productos2 by productos2.ID into productGroup
    //select new {prods.ID, productos2.Codigo, productos2.Nombre, productos2.Descripcion, productos2.Precio, productos2.Stock, salidas.StockOut, entradas.StockIn };

    //    OrderBy(letter => letter.FirstLetter);
                
                gridProductos.DataSource = data;
                gridProductos.ClearSelection();
            }
            catch
            {
                MessageBox.Show("No se puede conectar con la base de datos");
            }

            //Establecemos un tamaño para las celdas, mejora la estetica del datagrid
            DataGridViewColumn columnID = gridProductos.Columns[0];
            DataGridViewColumn columnCodigo = gridProductos.Columns[1];
            DataGridViewColumn columnDescripcion = gridProductos.Columns[3];
            DataGridViewColumn columnPrecio = gridProductos.Columns[4];
            DataGridViewColumn columnStock = gridProductos.Columns[5];
            DataGridViewColumn columnStockOut = gridProductos.Columns[6];
            DataGridViewColumn columnStockIn = gridProductos.Columns[7];

            columnID.Width = 35;
            columnCodigo.Width = 70;
            columnDescripcion.Width = 200;
            columnPrecio.Width = 84;
            columnStock.Width = 84;

            columnStockOut.Width = 60;
            columnStockOut.Visible = false;
            columnStockIn.Width = 60;
            columnStockIn.Visible = false;

            lblSendId.Text = gridProductos.Rows[0].Cells[0].Value.ToString();



        }


        private void gridProductos_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            // Recogemos los datos del click del usuario en el datagrid
            int i;
            i = gridProductos.SelectedCells[0].RowIndex;
            lblSendId.Text = gridProductos.Rows[i].Cells[0].Value.ToString();
            lblSendCodigo.Text  = gridProductos.Rows[i].Cells[1].Value.ToString();
            lblSendNombre.Text = gridProductos.Rows[i].Cells[2].Value.ToString();
            lblSendDescripcion.Text = gridProductos.Rows[i].Cells[3].Value.ToString();
            lblSendPrecio.Text = gridProductos.Rows[i].Cells[4].Value.ToString();
            lblSendStock.Text = gridProductos.Rows[i].Cells[5].Value.ToString();
        }

        private void btnProductosEliminar_Click(object sender, EventArgs e)
        {

            if (null == lblSendId.Text)
            {
                MessageBox.Show("Debes escoger un producto para eliminar");
            }
            else 
            {
                using (AlmacenEntities productosContext =
                  new AlmacenEntities())
                {
                    Guid obtenerGuid = new Guid(lblSendId.Text);
                    // Escogemos de la base de datos el producto que sea igual al ID pasado del formulario Productos
                    var eliminar = (from p in productosContext.Productos
                                    where p.ID == obtenerGuid
                                    select p).First();

                    try
                    {
                        productosContext.DeleteObject(eliminar);
                        MessageBox.Show("Producto Eliminado");
                        productosContext.SaveChanges();
                        //gridProductos.DataSource = productosContext.Productos;

                        try //Rellenar el datagrid con los datos obtenidos en la bbdd
                        {
                            var AlmacenEntities2 = new AlmacenEntities();

                            gridProductos.DataSource = AlmacenEntities2.Productos;
                            gridProductos.CurrentCell = null; 
                        }
                        catch
                        {
                            MessageBox.Show("No se puede conectar con la base de datos");
                        }
                    }

                    catch
                    {
                        MessageBox.Show("Debes escoger un producto para eliminar");
                    }
                }

            }
        }



        private void btnDetallesProducto_Click_1(object sender, EventArgs e)
        {

            //instanciamos el formulario
            formProductoDetalle detalles = new formProductoDetalle();

            // pasamos los valores
            detalles.recibirId = lblSendId.Text;
            detalles.recibirNombre = lblSendNombre.Text;

            //Abrir formulario de detalle
            detalles.Visible = true;
            this.Visible = false;
            detalles.Location = this.Location;

            //Enviamos los datos obtenidos del click en el datagrid



            ////instanciamos el formulario
            //formModificar modificar = new formModificar();
            ////Abrir formulario de modificaciones
            //modificar.Visible = true;
            //this.Visible = false;
            //modificar.Location = this.Location;

            ////Enviamos los datos obtenidos del click en el datagrid
            //modificar.recibirId = lblSendId.Text;
            //modificar.recibirCodigo = lblSendCodigo.Text;
            //modificar.recibirNombre = lblSendNombre.Text;
            //modificar.recibirDescripcion = lblSendDescripcion.Text;
            //modificar.recibirPrecio = lblSendPrecio.Text;
            //modificar.recibirStock = lblSendStock.Text;
   
        }


    }
}





//1.) Goto Form1 then Double Click it. At the code type this.

//public string CaptionText
//{get {return textBox1.Text;}
//set { textBox1.Text = value; }} 

//note: the value of your textbox1.text = sayre;

//2.) Goto Form2 then Double click it. At the code type this.

//// At your command button In Form2
//private void button1_Click(object sender, EventArgs e)
//{
//Form1 sForm1 = new Form1();
//textBox1.Text = sForm1.CaptionText;
//}



        //public string textoenviarmodificar
        //{
        //    get { return lblproductonombre.Text; }
        //    set { lblproductonombre.Text = "nameee"; }
        //} 






// use data from selected row in same form
        //Dim v_SelectRow As Integer
        //v_SelectRow = Me.DBVOwner.CurrentRow.Index
        //txtFirstName.Text = Me.DBVOwner.Item(1, v_SelectRow).Value
        //txtMiddleName.Text = Me.DBVOwner.Item(2, v_SelectRow).Value
        //txtLastName.Text = Me.DBVOwner.Item(3, v_SelectRow).Value



/* 
*******************

private void formProductos_Load(object sender, EventArgs e)
        {
            this.gridProductos.DefaultCellStyle.ForeColor = Color.Yellow;
            this.gridProductos.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            this.gridProductos.MultiSelect = false;
            this.gridProductos.ReadOnly = true;
            this.gridProductos.RowHeadersVisible = false;
            


           //select new { productos2.ID, productos2.Codigo, productos2.Nombre,
           //    productos2.Descripcion, productos2.Precio, productos2.Stock, salidas.StockOut, entradas.StockIn };
            
            // Esta linea llama al meodo SetGridViewSortState definido anteriormente, sirve para evitar que las 
            //columnas se utilicen para reordenar los datos
            SetGridViewSortState(this.gridProductos, DataGridViewColumnSortMode.NotSortable);

 

            // Creamos la variable AlmacenEntities2 que es el que maneja las consultas con la base de datos
           

            //            // Recogemos la tabla productos con el gestor de entidades
            //            var productos = AlmacenEntities2.Productos;

            //            // Rellenamos el datagridview con los datos obtenidos por el gestor

            //            //gridProductos.DataSource = productos;


            //            //gridProductos.Columns["ID"].Visible = false;

            //            //string lastName = "Zhou";

            //            //using (AlmacenEntities context = new AlmacenEntities())
            ////{
            ////    ObjectSet contacts = context.Productos.Where(

            ////    var ordersQuery = from contact in contacts
            ////                      where contact.LastName == lastName
            ////                      select new { LastName = contact.LastName, Orders = contact.SalesOrderHeaders };
            
            try //Rellenar el datagrid con los datos obtenidos en la bbdd
            {
                var AlmacenEntities2 = new AlmacenEntities();
                var data = from productos2 in AlmacenEntities2.Productos
                           join
                               salidas in AlmacenEntities2.Salidas on productos2.ID equals salidas.IdProducto
                           join
                               entradas in AlmacenEntities2.Entradas on productos2.ID equals entradas.IdProducto
                           select new { productos2.ID, productos2.Codigo, productos2.Nombre, productos2.Descripcion, productos2.Precio, productos2.Stock, salidas.StockOut, entradas.StockIn };
                gridProductos.DataSource = data;
                gridProductos.ClearSelection();
            }
             catch 
            {
                MessageBox.Show("No se puede conectar con la base de datos");
            }

            //Establecemos un tamaño para las celdas, mejora la estetica del datagrid
            DataGridViewColumn columnID = gridProductos.Columns[0];
            DataGridViewColumn columnCodigo = gridProductos.Columns[1];
            DataGridViewColumn columnDescripcion = gridProductos.Columns[3];
            DataGridViewColumn columnPrecio = gridProductos.Columns[4];
            DataGridViewColumn columnStock = gridProductos.Columns[5];
            DataGridViewColumn columnStockOut = gridProductos.Columns[6];
            DataGridViewColumn columnStockIn = gridProductos.Columns[7];

            columnID.Width = 35;
            columnCodigo.Width = 58;
            columnDescripcion.Width = 140;
            columnPrecio.Width = 60;
            columnStock.Width = 60;
            columnStockOut.Width = 60;
            columnStockIn.Width = 60;

            lblSendId.Text = gridProductos.Rows[0].Cells[0].Value.ToString(); 
            

        }

*******************
\*/